// 此处第二个参数vm，就是我们在页面使用的this，你可以通过vm获取vuex等操作
const install = (Vue, vm) => {
	// 通用请求头设定
	const ajaxHeader = 'x-ajax';
	const sessionIdHeader = 'Authorization';
	
	// 请求参数默认配置
	uni.$u.http.setConfig((config) => {
		config.baseURL = vm.vuex_config.baseUrl;
		
		//originalData: true, 
		// 默认头部，http2约定header名称统一小写 
		config.header['content-type'] = 'application/json';
		config.header['x-requested-with'] = 'XMLHttpRequest';
		
		return config;
	});
	
	// 请求拦截，配置Token等参数
	uni.$u.http.interceptors.request.use((config) => {
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
				
		config.header["source"] = "app";
		config.header['Access-Control-Allow-Origin'] = true;
		
		// 设定传递 Token 认证参数 
		if (vm.vuex_token){
			config.header[sessionIdHeader] = vm.vuex_token;
		}
		
		return config;
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	});
	
	// 响应拦截，判断状态码是否通过
	uni.$u.http.interceptors.response.use((res) => {
	    console.log('response', res);
		let data = res.data;
		
		if (!(data)){
			vm.$u.toast('未连接到服务器')
			return false;
		}
		
		if(data.code ==401){
			uni.clearStorageSync();
			uni.redirectTo({
				url:"/pages/sys/login/index"
			})
		}
		
		if (typeof data === 'object' && !(data instanceof Array)){
			if (data.token){
				vm.$u.vuex('vuex_token', data.token);
				if (data.user){
					vm.$u.vuex('vuex_user', data.user);
				}
				vm.$u.vuex('vuex_isAgent', data.isAgent);
			}
			if (data.result === 'login'){
				vm.$u.vuex('vuex_user', {});
				/* if (req.tryagain == undefined || req.tryagain){
					req.tryagain = false; req.remember = true;
					await vm.$u.http.request(req).then(res => {
						data = res;
					});
				}
				if (data.result === 'login'){
					if (!req.data.loginCheck){
						vm.$u.toast(data.msg);
					}
					req.tryagain = true;
				} */
			}
		}
		
		/* if (res.header && res.header[rememberMeHeader]){
			let remember = res.header[rememberMeHeader];
			if (remember && remember != 'deleteMe'){
				vm.$u.vuex('vuex_remember', remember);
			}else{
				vm.$u.vuex('vuex_remember', '');
			}
		} */
		
		return data;
	}, (response) => { 
		 //未登录时清空缓存跳转
		  if(response.data.code ==401){
			  uni.clearStorageSync();
			  uni.redirectTo({
			  	url:"/pages/user/user"
			  })
		  }
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response)
	});
	
	// 封装 get text 请求
	vm.$u.getText = (url, data = {}, header = {}) => {
		return vm.$u.http.request({
			dataType: 'text',
			method: 'GET',
			url,
			header,
			data
		})
	}
	
	// 封装 post json 请求
	vm.$u.postJson = (url, data = {}, header = {}) => {
		header['content-type'] = 'application/json';
		return vm.$u.http.request({
			url,
			method: 'POST',
			header,
			data
		})
	}
	
}

export default {
	install
}